package cn.itcast.nems.studentrecord.dao.mapper;

import cn.itcast.nems.studentrecord.dao.entity.StudentRecordTransaction;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface StudentRecordTransactionMapper extends BaseMapper<StudentRecordTransaction> {

    /**
     * 根据业务日期，获取最近的一条流转记录
     *
     * @param studentRecordId 学籍ID
     * @param type 1：进班，-1：出班
     * @return 最近的一条流转记录
     */
    StudentRecordTransaction selectLastTransaction(@Param("studentRecordId") String studentRecordId, @Param("type") int type);

    /**
     * 查询学员的流转记录
     *
     * @param studentId 学员ID
     * @return 流转记录
     */
    List<StudentRecordTransaction> selectStudentRecordTransactions(@Param("studentId") int studentId);

    /**
     * 查询流转记录
     *
     * @param studentRecordId 学籍id
     * @param referenceType   凭单类型
     * @return 流转记录
     */
    StudentRecordTransaction selectLastByStudentRecordReference(@Param("studentRecordId") String studentRecordId,
                                                                @Param("referenceType") String referenceType);

    /**
     * 查询流转记录
     *
     * @param studentRecordId 学籍id
     * @param referenceType   凭单类型
     * @param referenceId     凭单(订单)ID
     * @param referenceLineId 凭单(订单)行ID
     * @return 流转记录
     */
    StudentRecordTransaction selectByStudentRecordReference(@Param("studentRecordId") String studentRecordId,
                                                            @Param("referenceType") String referenceType,
                                                            @Param("referenceId") String referenceId,
                                                            @Param("referenceLineId") String referenceLineId);

    /**
     * 根据学籍ID查询最近的一条有效的流转记录
     *
     * @param studentRecordId 学籍ID
     * @param state           状态
     * @return 流转记录
     */
    StudentRecordTransaction selectLastByStudentRecordId(@Param("studentRecordId") String studentRecordId, @Param("state") String state);

    /**
     * @param referenceId     凭单ID
     * @param referenceLineId 凭单行ID
     * @param clazzId         班级ID
     * @param studentId       学员ID
     * @return 流转记录
     */
    List<StudentRecordTransaction> selectByReferenceClazzIdStudentId(@Param("referenceId") String referenceId,
                                                                     @Param("referenceLineId") String referenceLineId,
                                                                     @Param("clazzId") int clazzId,
                                                                     @Param("studentId") int studentId);

    /**
     * 修改流转记录状态
     *
     * @param referenceType   凭单类型
     * @param referenceLineId 凭单行ID
     * @param studentRecordId 学籍ID
     * @param modifiedBy      修改人
     * @param state           状态
     */
    void updateState(@Param("referenceType") String referenceType,
                     @Param("referenceLineId") String referenceLineId,
                     @Param("studentRecordId") String studentRecordId,
                     @Param("modifiedBy") String modifiedBy,
                     @Param("state") String state);

    /**
     * 根据学籍ID查询学籍流转记录表里这个学籍的最后一个出班记录
     *
     * @param studentRecordId 学籍ID
     * @return 流转记录
     */
    StudentRecordTransaction selectLastLeaveByStudentRecordId(@Param("studentRecordId") String studentRecordId);
}
